package com.starpl.mobile.android.monthunsae.november.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.starpl.mobile.android.monthunsae.november.R;
import com.starpl.mobile.android.monthunsae.november.command.MonthUnsaeCommand;
import com.starpl.mobile.android.platform.common.base.BaseActivity;
import com.starpl.mobile.android.platform.common.network.HttpHandler;


/**
 * 알람시간을 설정하는 Activity
 * 
 * @author 우연화
 * @since 2011.03.18
 */
public class SettingAlarmActivity extends BaseActivity implements OnClickListener
{
	private LinearLayout mLlStartTime;
	private LinearLayout mLlEndTime;

	private TextView mTvStartTime;
	private TextView mTvEndTime;

	private Button mBSave;

	private int mPositionStartTime;
	private int mPositionEndTime;

	private String[] mStartTime =
	{
			"오전 0시", // 0
			"오전 1시", "오전 2시", "오전 3시", "오전 4시", "오전 5시", // 5
			"오전 6시", "오전 7시", "오전 8시", "오전 9시", "오전 10시", // 10
			"오전 11시",
			
			"오전 12시", "오후 1시", "오후 2시", "오후 3시", // 15
			"오후 4시", "오후 5시", "오후 6시", "오후 7시", "오후 8시", // 20
			"오후 9시", "오후 10시", "오후 11시" // 23
	};

	private String[] mEndTime =
	{
			"오전 1시", // 0
			"오전 2시", "오전 3시", "오전 4시", "오전 5시", "오전 6시", // 5
			"오전 7시", "오전 8시", "오전 9시", "오전 10시", "오전 11시", // 10

			"오전 12시", "오후 1시", "오후 2시", "오후 3시", "오후 4시", // 15
			"오후 5시", "오후 6시", "오후 7시", "오후 8시", "오후 9시", // 20
			"오후 10시", "오후 11시", "오후 12시" // 23
	};

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.starpl.platform.common.base.BaseActivity#onCreate(android.os.Bundle)
	 */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.setting_alarm_activity);

		mLlStartTime = (LinearLayout) findViewById(R.id.setting_alarm_activity_ll_start);
		mLlEndTime = (LinearLayout) findViewById(R.id.setting_alarm_activity_ll_end);

		mTvStartTime = (TextView) findViewById(R.id.setting_alarm_activity_tv_start_time);
		mTvStartTime.setText("오전 0시");
		mTvEndTime = (TextView) findViewById(R.id.setting_alarm_activity_tv_end_time);
		mTvEndTime.setText("오후 12시");
		mBSave = (Button) findViewById(R.id.setting_alarm_activity_b_save);

		mLlStartTime.setOnClickListener(this);
		mLlEndTime.setOnClickListener(this);
		mBSave.setOnClickListener(this);
		
		mPositionStartTime = 0;
		mPositionEndTime = 0;
		
		registerForContextMenu(mLlStartTime);
		registerForContextMenu(mLlEndTime);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.starpl.platform.common.base.BaseActivity#onResume()
	 */
	@Override
	protected void onResume()
	{
		super.onResume();
		
		mPositionStartTime = getIntent().getIntExtra("startTime", 0);
		mPositionEndTime = getIntent().getIntExtra("endTime", 0);	
		
		mTvStartTime.setText(mStartTime[mPositionStartTime]);
		mTvEndTime.setText(mEndTime[mPositionEndTime]);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu,
	 * android.view.View, android.view.ContextMenu.ContextMenuInfo)
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
	{
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.clearHeader();

		switch(v.getId())
		{
		case R.id.setting_alarm_activity_ll_start:
			setStartTime(menu);
			break;
		case R.id.setting_alarm_activity_ll_end:
			setEndTime(menu);
			break;
		}
	}

	/**
	 * @param menu
	 */
	private void setStartTime(ContextMenu menu)
	{
		for(int i = 0 ; i < 24 ; i++)
		{
			menu.add(0, i, 0, mStartTime[i]);
		}
	}

	/**
	 * @param menu
	 */
	private void setEndTime(ContextMenu menu)
	{
		for(int i = 0 ; i < 24 ; i++)
		{
			menu.add(0, (i+24), 0, mEndTime[i]);
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.app.Activity#onContextItemSelected(android.view.MenuItem)
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item)
	{
		// 시작 시간
		if(item.getItemId()<24)
		{
			// 시작시간이 변경되면 끝시간의 시작 인덱스도 변경된다.
			mPositionStartTime = item.getItemId();
			
			if(mPositionEndTime<mPositionStartTime)
			{
				mPositionEndTime = mPositionStartTime;
				mTvEndTime.setText(mEndTime[mPositionEndTime]);
			}
			
			mTvStartTime.setText(mStartTime[mPositionStartTime]);
		}
		// 끝시간
		else if(item.getItemId()>=24)
		{
			mPositionEndTime = item.getItemId()-24;
			
			if(mPositionStartTime>mPositionEndTime)
			{
				mPositionStartTime = mPositionEndTime;
				mTvStartTime.setText(mStartTime[mPositionStartTime]);
			}
			mTvEndTime.setText(mEndTime[mPositionEndTime]);
		}
		return false;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see android.view.View.OnClickListener#onClick(android.view.View)
	 */
	@Override
	public void onClick(View v)
	{
		switch(v.getId())
		{
		// 시간 설정 저장하기
		case R.id.setting_alarm_activity_b_save:
			MonthUnsaeCommand.updatePushTime(new HttpHandler(this, "알림시간 설정 변경하는 중")
			{
				@Override
				public void didSucceed(Object result)
				{
					Bundle extras = new Bundle();
					extras.putString("startTime", mStartTime[mPositionStartTime]);
					extras.putString("endTime", mEndTime[mPositionEndTime]);
					Intent intent = new Intent();
					intent.putExtras(extras);
					setResult(RESULT_OK, intent);
					
					finish();
				}
			}, mPositionStartTime, mPositionEndTime+1);
			break;

		// 시작 시간 설정하기
		case R.id.setting_alarm_activity_ll_start:
			mLlStartTime.showContextMenu();
			break;

		// 끝 시간 설정하기
		case R.id.setting_alarm_activity_ll_end:
			mLlEndTime.showContextMenu();
			break;
		}
	}
}
